package utils

import (
	"context"
	"errors"
	"fmt"
	"os"

	"github.com/sashabaranov/go-openai" // 仍然可以使用这个库，因为DeepSeek API兼容OpenAI格式
)

type DeepSeekClient struct {
	Client *openai.Client  // 实际与API通信的客户端
	ctx    context.Context // 用于控制请求的上下文
}

func NewDeepSeekClient() (*DeepSeekClient, error) {
	// 1. 获取API密钥（先从环境变量获取，没有就用默认值）
	apiKey := os.Getenv("DEEPSEEK_API_KEY")
	if apiKey == "" {
		apiKey = "sk-8954de8afa8d430e87842b3e8ae07c48"
	}

	// 2. 配置客户端
	config := openai.DefaultConfig(apiKey)
	config.BaseURL = "https://api.deepseek.com/v1" // 设置DeepSeek的API地址

	// 3. 创建客户端
	client := openai.NewClientWithConfig(config)

	// 4. 创建默认上下文
	ctx := context.Background()

	// 5. 返回配置好的DeepSeekClient
	return &DeepSeekClient{
		Client: client,
		ctx:    ctx,
	}, nil
}

func (d *DeepSeekClient) SendMessage(message string) (string, error) {
	// 1. 准备请求内容
	req := openai.ChatCompletionRequest{
		Model: "deepseek-chat", // 指定使用DeepSeek的聊天模型
		Messages: []openai.ChatCompletionMessage{
			{
				Role:    openai.ChatMessageRoleUser, // 设置消息角色为用户
				Content: message,                    // 用户发的消息内容
			},
		},
	}

	// 2. 发送请求并获取响应
	resp, err := d.Client.CreateChatCompletion(d.ctx, req)
	if err != nil {
		return "", fmt.Errorf("failed to create chat completion: %w", err)
	}

	// 3. 检查是否有响应
	if len(resp.Choices) == 0 {
		return "", errors.New("no response from DeepSeek API")
	}

	// 4. 返回AI的回复
	return resp.Choices[0].Message.Content, nil
}

/*
使用方法：
client, err := utils.NewDeepSeekClient()
if err != nil {
    log.Fatalf("Failed to create DeepSeek client: %v", err)
}

response, err := client.SendMessage("你好，DeepSeek！")
if err != nil {
    log.Printf("Error sending message: %v", err)
} else {
    fmt.Println("Response:", response)
}
*/
